@@ -14,7 +14,7 @@ urlpatterns = [  | 
            ||
| 14 | 14 | 
                url(r'^u/login$', account_views.user_login_api, name='user_login_api'), # 用户登录  | 
            
| 15 | 15 | 
                ]  | 
            
| 16 | 16 | 
                 | 
            
| 17 | 
                -urlpatterns = [  | 
            |
| 17 | 
                +urlpatterns += [  | 
            |
| 18 | 18 | 
                url(r'^g/create$', group_views.group_create_api, name='group_create_api'), # 群组创建  | 
            
| 19 | 19 | 
                url(r'^g/detail$', group_views.group_detail_api, name='group_detail_api'), # 群组详情  | 
            
| 20 | 20 | 
                url(r'^g/update$', group_views.group_update_api, name='group_update_api'), # 群组更新  | 
            
                @@ -26,6 +26,11 @@ urlpatterns = [  | 
            ||
| 26 | 26 | 
                ]  | 
            
| 27 | 27 | 
                 | 
            
| 28 | 28 | 
                urlpatterns += [  | 
            
| 29 | 
                + url(r'^f/upload$', group_views.flyimg_upload_api, name='flyimg_upload_api'), # 飞图上传  | 
            |
| 30 | 
                + url(r'^f/list$', group_views.flyimg_upload_api, name='flyimg_list_api'), # 飞图列表  | 
            |
| 31 | 
                +]  | 
            |
| 32 | 
                +  | 
            |
| 33 | 
                +urlpatterns += [  | 
            |
| 29 | 34 | 
                url(r'^uuid_init$', photo_views.uuid_init, name='uuid_init'), # 生成唯一标识  | 
            
| 30 | 35 | 
                url(r'^uuid$', photo_views.uuid, name='uuid'), # 获取唯一标识  | 
            
| 31 | 36 | 
                url(r'^photos/upload$', photo_views.upload_photo, name='upload_photo'), # 上传图片  | 
            
                @@ -125,3 +125,11 @@ class GroupPhotoInfo(CreateUpdateMixin):  | 
            ||
| 125 | 125 | 
                @property  | 
            
| 126 | 126 | 
                def photo_thumbnail_url(self):  | 
            
| 127 | 127 | 
                         return u'{0}/{1}'.format(settings.IMG_DOMAIN, self.photo_thumbnail_path) if self.photo_thumbnail_path else ''
               | 
            
| 128 | 
                +  | 
            |
| 129 | 
                + @property  | 
            |
| 130 | 
                + def photo_info(self):  | 
            |
| 131 | 
                +        return {
               | 
            |
| 132 | 
                + 'photo_id': self.pk,  | 
            |
| 133 | 
                + 'photo_path': self.photo_url,  | 
            |
| 134 | 
                + 'photo_thumbnail_path': self.photo_thumbnail_url,  | 
            |
| 135 | 
                + }  | 
            
                @@ -1,5 +1,6 @@  | 
            ||
| 1 | 1 | 
                # -*- coding: utf-8 -*-  | 
            
| 2 | 2 | 
                 | 
            
| 3 | 
                +from django.core.files.storage import default_storage  | 
            |
| 3 | 4 | 
                from django.db import transaction  | 
            
| 4 | 5 | 
                from django.http import JsonResponse  | 
            
| 5 | 6 | 
                 | 
            
                @@ -14,6 +15,9 @@ from utils.ip_utils import ip_addr  | 
            ||
| 14 | 15 | 
                from curtail_uuid import CurtailUUID  | 
            
| 15 | 16 | 
                from TimeConvert import TimeConvert as tc  | 
            
| 16 | 17 | 
                 | 
            
| 18 | 
                +import os  | 
            |
| 19 | 
                +import shortuuid  | 
            |
| 20 | 
                +  | 
            |
| 17 | 21 | 
                 | 
            
| 18 | 22 | 
                @transaction.atomic  | 
            
| 19 | 23 | 
                def group_create_api(request):  | 
            
                @@ -48,7 +52,7 @@ def group_create_api(request):  | 
            ||
| 48 | 52 | 
                         'data': {
               | 
            
| 49 | 53 | 
                'group_id': group_id,  | 
            
| 50 | 54 | 
                'group': group.data,  | 
            
| 51 | 
                - 'users': group.users(user_id)  | 
            |
| 55 | 
                + 'users': group.users(user_id),  | 
            |
| 52 | 56 | 
                },  | 
            
| 53 | 57 | 
                })  | 
            
| 54 | 58 | 
                 | 
            
                @@ -79,7 +83,7 @@ def group_detail_api(request):  | 
            ||
| 79 | 83 | 
                         'data': {
               | 
            
| 80 | 84 | 
                'group_id': group_id,  | 
            
| 81 | 85 | 
                'group': group.data,  | 
            
| 82 | 
                - 'users': group.users(user_id)  | 
            |
| 86 | 
                + 'users': group.users(user_id),  | 
            |
| 83 | 87 | 
                },  | 
            
| 84 | 88 | 
                })  | 
            
| 85 | 89 | 
                 | 
            
                @@ -122,7 +126,7 @@ def group_update_api(request):  | 
            ||
| 122 | 126 | 
                         'data': {
               | 
            
| 123 | 127 | 
                'group_id': group_id,  | 
            
| 124 | 128 | 
                'group': group.data,  | 
            
| 125 | 
                - 'users': group.users(admin_id)  | 
            |
| 129 | 
                + 'users': group.users(admin_id),  | 
            |
| 126 | 130 | 
                },  | 
            
| 127 | 131 | 
                })  | 
            
| 128 | 132 | 
                 | 
            
                @@ -256,7 +260,7 @@ def group_remove_api(request):  | 
            ||
| 256 | 260 | 
                'message': u'用户移除成功',  | 
            
| 257 | 261 | 
                         'data': {
               | 
            
| 258 | 262 | 
                'group_id': group_id,  | 
            
| 259 | 
                - 'users': group.users(admin_id)  | 
            |
| 263 | 
                + 'users': group.users(admin_id),  | 
            |
| 260 | 264 | 
                },  | 
            
| 261 | 265 | 
                })  | 
            
| 262 | 266 | 
                 | 
            
                @@ -310,7 +314,7 @@ def group_pass_api(request):  | 
            ||
| 310 | 314 | 
                'message': u'申请通过成功',  | 
            
| 311 | 315 | 
                         'data': {
               | 
            
| 312 | 316 | 
                'group_id': group_id,  | 
            
| 313 | 
                - 'users': group.users(admin_id)  | 
            |
| 317 | 
                + 'users': group.users(admin_id),  | 
            |
| 314 | 318 | 
                },  | 
            
| 315 | 319 | 
                })  | 
            
| 316 | 320 | 
                 | 
            
                @@ -364,11 +368,73 @@ def group_refuse_api(request):  | 
            ||
| 364 | 368 | 
                'message': u'申请拒绝成功',  | 
            
| 365 | 369 | 
                         'data': {
               | 
            
| 366 | 370 | 
                'group_id': group_id,  | 
            
| 367 | 
                - 'users': group.users(admin_id)  | 
            |
| 371 | 
                + 'users': group.users(admin_id),  | 
            |
| 368 | 372 | 
                },  | 
            
| 369 | 373 | 
                })  | 
            
| 370 | 374 | 
                 | 
            
| 371 | 375 | 
                 | 
            
| 376 | 
                +def flyimg_upload_api(request):  | 
            |
| 377 | 
                +    group_id = request.POST.get('group_id', '')
               | 
            |
| 378 | 
                +    user_id = request.POST.get('user_id', '')
               | 
            |
| 379 | 
                +    nickname = request.POST.get('nickname', '')
               | 
            |
| 380 | 
                +  | 
            |
| 381 | 
                +    photo = request.FILES.get('photo', '')
               | 
            |
| 382 | 
                +  | 
            |
| 383 | 
                +    photo_id = int(request.POST.get('photo_id', -1))
               | 
            |
| 384 | 
                +  | 
            |
| 385 | 
                + try:  | 
            |
| 386 | 
                + user = UserInfo.objects.get(user_id=user_id)  | 
            |
| 387 | 
                + except UserInfo.DoesNotExist:  | 
            |
| 388 | 
                +        return JsonResponse({
               | 
            |
| 389 | 
                + 'status': 4011,  | 
            |
| 390 | 
                + 'message': u'用户不存在',  | 
            |
| 391 | 
                + })  | 
            |
| 392 | 
                +  | 
            |
| 393 | 
                + try:  | 
            |
| 394 | 
                + group = GroupInfo.objects.get(group_id=group_id)  | 
            |
| 395 | 
                + except GroupInfo.DoesNotExist:  | 
            |
| 396 | 
                +        return JsonResponse({
               | 
            |
| 397 | 
                + 'status': 4020,  | 
            |
| 398 | 
                + 'message': u'群组不存在',  | 
            |
| 399 | 
                + })  | 
            |
| 400 | 
                +  | 
            |
| 401 | 
                + if photo:  | 
            |
| 402 | 
                + _, extension = os.path.splitext(photo.name)  | 
            |
| 403 | 
                +  | 
            |
| 404 | 
                + uuid = shortuuid.uuid()  | 
            |
| 405 | 
                +        photo_path = 'fly/{uuid}{extension}'.format(uuid=uuid, extension=extension)
               | 
            |
| 406 | 
                +        photo_thumbnail_path = 'fly/{uuid}_thumbnail{extension}'.format(uuid=uuid, extension=extension)
               | 
            |
| 407 | 
                +  | 
            |
| 408 | 
                + if default_storage.exists(photo_path):  | 
            |
| 409 | 
                + default_storage.delete(photo_path)  | 
            |
| 410 | 
                + default_storage.save(photo_path, photo)  | 
            |
| 411 | 
                +  | 
            |
| 412 | 
                + if default_storage.exists(photo_thumbnail_path):  | 
            |
| 413 | 
                + default_storage.delete(photo_thumbnail_path)  | 
            |
| 414 | 
                + default_storage.save(photo_thumbnail_path, photo)  | 
            |
| 415 | 
                +  | 
            |
| 416 | 
                + group_photo = GroupPhotoInfo.objects.create(  | 
            |
| 417 | 
                + group_id=group_id,  | 
            |
| 418 | 
                + user_id=user_id,  | 
            |
| 419 | 
                + nickname=nickname,  | 
            |
| 420 | 
                + photo_path=photo_path,  | 
            |
| 421 | 
                + photo_thumbnail_path=photo_thumbnail_path,  | 
            |
| 422 | 
                + )  | 
            |
| 423 | 
                +  | 
            |
| 424 | 
                + group_photos = GroupPhotoInfo.objects.filter(  | 
            |
| 425 | 
                + group_id=group_id,  | 
            |
| 426 | 
                + pk__gt=photo_id,  | 
            |
| 427 | 
                + ).order_by(  | 
            |
| 428 | 
                + 'created_at'  | 
            |
| 429 | 
                + )  | 
            |
| 430 | 
                +  | 
            |
| 431 | 
                +    return JsonResponse({
               | 
            |
| 432 | 
                + 'status': 200,  | 
            |
| 433 | 
                + 'message': u'飞图上传成功',  | 
            |
| 434 | 
                + 'data': [photo.photo_info for photo in group_photos],  | 
            |
| 435 | 
                + })  | 
            |
| 436 | 
                +  | 
            |
| 437 | 
                +  | 
            |
| 372 | 438 | 
                class GroupInfoViewSet(viewsets.ModelViewSet):  | 
            
| 373 | 439 | 
                     queryset = GroupInfo.objects.all().order_by('-created_at')
               | 
            
| 374 | 440 | 
                serializer_class = GroupInfoSerializer  | 
            
                @@ -123,7 +123,7 @@ def session_detail_api(request, session):  | 
            ||
| 123 | 123 | 
                'message': u'获取照片列表成功',  | 
            
| 124 | 124 | 
                         'data': {
               | 
            
| 125 | 125 | 
                'count': photos.count(),  | 
            
| 126 | 
                - 'photos': [p.detail for p in photos]  | 
            |
| 126 | 
                + 'photos': [p.detail for p in photos],  | 
            |
| 127 | 127 | 
                }  | 
            
| 128 | 128 | 
                })  | 
            
| 129 | 129 | 
                 | 
            
                @@ -144,7 +144,7 @@ def photo_standard_api(request, photo):  | 
            ||
| 144 | 144 | 
                'status': 200,  | 
            
| 145 | 145 | 
                'message': u'获取照片详情成功',  | 
            
| 146 | 146 | 
                         'data': {
               | 
            
| 147 | 
                - 'photo': photo.detail  | 
            |
| 147 | 
                + 'photo': photo.detail,  | 
            |
| 148 | 148 | 
                }  | 
            
| 149 | 149 | 
                })  | 
            
| 150 | 150 | 
                 |